今天開始終於要來講self-attention了,由於我對於self-attention比較不熟,因此先透過
李弘毅老師的影片來惡補一下,影片連結
在CNN中,Model的輸入通常都是一個vector,但是如果今天的輸入是一排的向量,也就是說每次輸入的長度都不一樣呢,那model要怎麼處理呢?
這個問題就像是說翻譯問題,I have a pen 我有一支筆,這是一個由四個字的序列轉換為五個字序列的過程,所以輸入和輸出的長度是不一樣的
在處理文字轉成向量(vector)的時候,有兩個方法,一個就是利用One-hot Encoding,如果英文有10萬個字,那就創建一個10萬的vector,然後把所有的字都去做標籤,如上圖所示,但是這樣做會有一個問題,就是沒有辦法知道字跟字之間的關係,因此就出現了一個word embedding的方法,可以利用這個方法在標籤文字的時候知道字和字之間的關係
那這個模型的輸出會是什麼呢?
會有三個可能性
第一個可能性
每一個vector都輸出一個label,也就是說輸出跟輸入的長度是一樣的
例如:詞性標註
第二個可能性
整個sequence只需要輸出一個label
例如:情感分析,可以讓機器去訓練出一個句子是正面的句子還是負面的句子
第三個可能性
要讓機器自己猜說要輸出多少個label
例如上面翻譯的舉例,四個字的序列轉換成5個字的序列
當我們現在有4個vector輸出的時候,我們可以把這四個vector都丟進全聯接層
但是這樣會出現一個問題,就是我們沒有辦法判斷這4個vector的相關聯性,但是如果我們將這四個vector分別丟進每一個對應輸出的全連階層,除了會造成運算量過大,還會產生一個問題,就是沒辦法判斷到底要輸出多少個label
今天先打到這邊,明天繼續